package impl.agentt;

import fr.irit.smac.may.lib.components.controlflow.SequentialDispatcher;
import fr.irit.smac.may.lib.components.controlflow.SequentialDispatcherImpl;
import message.EDTMessage;
import mysticedt.BehaviourP;
import mysticedt.UnePresence;

/***
 * Ceci est l'implementation du composant "UnePresence". Cette implementation
 * est generique et encapsule le composant de comportement de l'espece d'agent
 * presence.
 * 
 * Comme le comportement des agents de cette espece peut varrier, alors il est
 * necessaire de passer au constructeur de cette implémentation l'instance du
 * comportement que l'on souhaite utiliser (cf constructor).
 * 
 * @author fanfan
 * 
 */
public class UnePresenceImpl extends UnePresence {

	/*
	 * Si c'est un message d'un etudiant, je me prepare a aider un etudiant : -
	 * quel cours veut-il ? y-a-t-il encore de la place ? Sinon je me prepare a
	 * aider un enseignant : - je dois lui trouver une plage horaire lui
	 * convenant
	 * 
	 * Si c'est un enseignant : - regarde ses indisponibilites, puis je peux
	 * agir Si c'est un etudiant : - cherche le creneau avec le prof et le cours
	 * qui lui convient avec une place disponible (si plus de places dans la
	 * plage horaire deja cree, obligation de creer nouvelle plage horaire,
	 * discussion avec d'autres agents Presence (prevoir les precedences...))
	 * 
	 * Si c'est un enseignant : - lui cree une plage horaire, l'initialise... -
	 * verifie si c'est OK, sinon discution avec d'autres agent Presence |
	 * relance la creation d'une plage horaire Si c'est un etudiant : - l'ajoute
	 * dans une plage horaire disposant d'une place
	 */

	// ceci est l'implementation que l'agent presence utilisera.
	BehaviourP behaviorToUse;

	// pour instancer un composant presence il faudra fournir
	// l'implementation du behaviour
	public UnePresenceImpl(BehaviourP behaviorToUse) {
		this.behaviorToUse = behaviorToUse;
	}

	@Override
	protected SequentialDispatcher<EDTMessage> make_dispatcher() {
		return new SequentialDispatcherImpl<EDTMessage>();
	}

	@Override
	protected BehaviourP make_behaviour() {
		return behaviorToUse;
	}
}
